/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ac.pbp.service;

import ac.pbp.core.exception.ServiceException;
import ac.pbp.core.filter.FilterCriteria;
import ac.pbp.core.paging.FilterAndPaging;
import ac.pbp.dao.PengarangDao;
import ac.pbp.dto.PengarangDto;
import ac.pbp.dto.filter.PengarangFilterCriteria;
import ac.pbp.model.Pengarang;
import ac.pbp.model.Pengarang;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author Kim
 */
@Component
@Transactional
public class PengarangService {
    
    @Autowired
    private PengarangDao pengarangDao;
    
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE, rollbackFor = {Exception.class})
    public void addPengarang(Pengarang pengarang, String photo) throws ServiceException {
                
        if (pengarang.getKodePengarang() != null) {
        
            pengarang.setPicture(photo);
            
            pengarangDao.add(pengarang);
        } 
    }
    
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE, rollbackFor = {Exception.class})
    public String updatePengarang(Pengarang pengarang) throws ServiceException {
        
        if (pengarang.getKodePengarang() != null) {
            Pengarang pengarangInner = pengarangDao.load(pengarang.getKodePengarang());
            
            pengarangDao.update(pengarangInner); 
            pengarangInner.setNamaPengarang(pengarang.getNamaPengarang());
            pengarangInner.setGenderPengarang(pengarang.getGenderPengarang());
            pengarangInner.setTanggalUltah(pengarang.getTanggalUltah());
            pengarangInner.setTempatLahir(pengarang.getTempatLahir());
            pengarangInner.setPicture(pengarang.getPicture());
            pengarangDao.update(pengarangInner);
            
        }
        
        return pengarang.getKodePengarang();
    }
    
    @Transactional(readOnly = true, propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE, rollbackFor = {Exception.class})
    public Pengarang loadPengarang(String kodePengarang) {
        return pengarangDao.load(kodePengarang);
    }
    
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE, rollbackFor = {Exception.class})
    public void deletePengarang(String idArray) {
        String[] idArrayRay = idArray.split(",");
        for (int i = 0; i < idArrayRay.length; i++) {
            try {
                if (!idArrayRay[i].equals("")) {
                    pengarangDao.delete(pengarangDao.load(idArrayRay[i]));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    @SuppressWarnings("unchecked")
    public PengarangDto filterPengarang(FilterCriteria filterCriteria) {
        PengarangDto pengarangDto = new PengarangDto();
        
        pengarangDto.setPengarangList(FilterAndPaging.filter(this.pengarangDao, filterCriteria));
        pengarangDto.setFilterCriteria((PengarangFilterCriteria) filterCriteria);

        return pengarangDto;
    }
    
    public List<Pengarang> loadAll() {
        
        return pengarangDao.loadAll();
    }
}
